package com.example.administrator.mydifferutils;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.util.DiffUtil;

import java.util.List;

/**
 * 文 件 名: MyDifferUtilCallback
 * 创 建 人: banbury
 * 创建日期: 2017/4/12 0012 15:25
 * 邮   箱:
 * 博   客:
 * 修改时间：
 * 修改备注：
 */

public class MyDifferUtilCallback extends DiffUtil.Callback {
    private List<Bean> oldList;
    private List<Bean> newList;

    public MyDifferUtilCallback(List<Bean> oldList, List<Bean> newList) {
        this.oldList = oldList;
        this.newList = newList;
    }

    @Override
    public int getOldListSize() {
        return oldList.size();
    }

    @Override
    public int getNewListSize() {
        return newList.size();
    }

    @Override
    public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) {
        return oldList.get(oldItemPosition).getId() == newList.get(newItemPosition).getId();
    }

    //上面的方法返回true是，调用这个方法
    @Override
    public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) {
        return oldList.get(oldItemPosition).getName().equals(newList.get(newItemPosition).getName());
    }

    /**
     * 上面的方法返回false，调这个方法
     * @param oldItemPosition
     * @param newItemPosition
     * @return 把不同的内容传出去，传入RecyclerView的onBindViewHolder(MyViewHolder holder, int position, List<Object> payloads)的第三个参数的集合中
     */
    @Nullable
    @Override
    public Object getChangePayload(int oldItemPosition, int newItemPosition) {
        Bean oldBean = oldList.get(oldItemPosition);
        Bean newBean = newList.get(newItemPosition);
        Bundle bundle = new Bundle();
        if(!newBean.getName().equals(oldBean.getName())){
            bundle.putString("name",newBean.getName());
        }

        if(newBean.getId()!=oldBean.getId()){
            bundle.putInt("id",newBean.getId());
        }

        if(bundle.size()==0){
            return null;
        }
        return bundle;
    }
}
